// 用户相关接口数据验证规则模块
import Joi from "joi"
/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */
// 定义验证注册和登录接口的数据规则
const username = Joi.string().alphanum().min(1).max(10).required().messages({
    "string.empty": "用户名必填",
    "any.required": "用户名必填",
    "string.alphanum": '只能包含a-zA-Z0-9',
    "string.max": '用户名长度不能超过10',
})
const password = Joi.string().pattern(/^[\S]{6,12}$/).required().messages({
    "string.empty": "密码必填",
    "any.required": "密码必填",
    "string.alphanum": '只能包含a-zA-Z0-9',
    "string.max": '用户名长度不能超过10',
    "string.pattern.base":'密码长度必须是6-12'
})

// 定义注册和登录接口的验证规则对象
export const reg_login_schema = {
    // 表示对req.body对象的数据进行验证
    body:{
        username,
        password
    }
}

// 定义更新用户信息接口的验证对象
const id = Joi.number().integer().min(1).required().messages({
    "any.required": "id必填"
})
const nickname = Joi.string().min(1).max(8).required().empty().messages({
    "string.empty": "用户名必填",
    "any.required": "用户名必填",
    "string.max": '用户名长度不能超过8',
})
const email = Joi.string().email().required().messages({
    "string.email":'必须是邮箱',
    "any.required": "邮箱必填"
})
export const update_userInfo_schema = {
    body:{
        nickname,
        email
    }
}

// 验证修改密码接口的规则对象,规则是和上面校验password的一样
export const update_userPwd_schema ={
    body:{
        oldpwd:password,
        // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
        // 解读：
        // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
        // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
        // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
        newpwd:Joi.not(Joi.ref('oldpwd')).concat(password).messages({
            'any.allowOnly': '新密码不能与旧密码相同。'
        })
    }
}

// 验证修改头像规则
const avatar = Joi.string().required().dataUri().messages({
    'string.base': '数据必须是字符串。',
    'string.empty': '数据不能为空。',
    'any.required': '数据 URI 是必填项。',
    'string.dataUri': '输入的不是有效的数据 URI。'
  })
export const update_avatar_schema = {
    body:{
        avatar
    }
}
